# include <iostream> // 引入输入输出流头文件

using namespace std; // 使用标准命名空间，这样在后续代码中就可以直接使用std命名空间下的函数和对象，

/*
  作者：C++：杨老师
  title：陈平安的数学问题
  
  
  title_description:
  					  陈平安最近学习了最大公约数和最小公倍数的概念，想借助于编程来实现，但是她发现原本的数学上学的方法并不适用于编程来实现，
		              现在请你帮小可写出对应的求出最大公约数和最小公倍数的程序，但是有一个要求，
					  求最大公约数和最小公倍数的过程要用两个用户自定义函数来实现出来。
 
  input_description： 输入一行，两个整数
 
  output_description：输出一行，两个整数，分别为最大公约数、最小公倍数，两个数字之间用一个空格隔开
   
*/


// 主函数，程序的入口点，从这里开始执行程序
int main(){
    
    int n,m;
    
    cin >> n>>m;
    
    int nm = n * m;
    
    // 采用辗转相除法 
    while(n % m != 0){
    	
    	// 求得余数 
        int temp = n % m;
        
        // 除数做 被除数 
        n = m;
        
        // 余数 做除数 
        m = temp;
        
        // 进入下一轮循环计算、直到余数为0 
        
    }
    cout << m << " " << nm/m;

	return 0; // 主函数执行完毕，返回0表示程序正常结束
	
}
